package administracion;

import java.util.ArrayList;
import java.util.List;

import dao.MesaDAO;
import dao.MozoDAO;
import dao.SectorDAO;
import dto.EmpleadoDTO;
import dto.MesaDTO;
import dto.MozoDTO;
import entity.Mesa;
import entity.MesaSimple;
import entity.Mozo;
import entity.Sector;

public class MozoManager {
	private static MozoDAO dao=MozoDAO.getInstancia();
	private static MozoManager instancia;
	
	public static MozoManager getInstancia(){
		if(instancia == null)
			instancia = new MozoManager();
		return instancia;
	}
	
	public List<MesaDTO> listarMesasPorMozo(MozoDTO mozo, int cantComensales){
		Sector s = SectorDAO.getInstancia().buscarSectorMozo(mozo);
		
		List<Mesa> mesas = s.getMesas();
		
		List<MesaDTO> result=new ArrayList<MesaDTO>();
		
		for(Mesa m:mesas){
			if(m.getCapacidad() >= cantComensales){
				if(m.getEstado().equalsIgnoreCase("libre")){
					result.add(m.getDTO());
				}
			}
		}
		return result;
	}
	
	public void asociarMesaAMozo(MozoDTO mozoDto,MesaDTO mesaDto){
		Mozo mozo=dao.buscarMozoCodigo(mozoDto.getLegajo());
		MesaSimple mesa = (MesaSimple) MesaDAO.getInstancia().buscarMesa(mesaDto.getIdMesa());
		mozo.agregarMesa(mesa);
		
		dao.updateMozo(mozo);
	}

	public List<MesaDTO> mesasComandasNoFacturadas(MozoDTO mozo) {
		Sector s = SectorDAO.getInstancia().buscarSectorMozo(mozo);
		
		List<Mesa> mesas = s.getMesas();
		
		List<MesaDTO> result=new ArrayList<MesaDTO>();
		
		for(Mesa m:mesas){
			if(m.getEstado().equalsIgnoreCase("ocupada")){
				if(m.getComanda().getEstado().equalsIgnoreCase("pendiente")){
					if(m.isFacturada() == false){
						result.add(m.getDTO());
					}
				}
			}
			
		}
		return result;
	}

	public List<MesaDTO> listarMesasAbiertasMozo(EmpleadoDTO emp) {
		MozoDTO m = new MozoDTO();
		m.setLegajo(emp.getLegajo());
		List<MesaSimple> mesas = new ArrayList<MesaSimple>();
		
		Mozo mozo = MozoDAO.getInstancia().buscarMozoCodigo(m.getLegajo());
		
		mesas = mozo.getMesasAsignadas();
		
		List<MesaDTO> result = new ArrayList<MesaDTO>();
		
		if(mesas.size() != 0){
			for(Mesa mes: mesas){
				if(!(mes.getEstado().equalsIgnoreCase("libre")))
					result.add(mes.getDTO());
			}
		}
		
		return result;
	}
	
	
}
